@group(0) @binding(0) var textureSampler: sampler;
@group(0) @binding(1) var diffuseTexture: texture_2d<f32>;

struct VertexOutput {
  @builtin(position) position: vec4<f32>,
  @location(0) fragUv: vec2<f32>,
}

@vertex
fn vertexShaderMain(@builtin(vertex_index) VertexIndex: u32) -> VertexOutput {
    const pos = array(
        vec2( 1.0,  1.0),
        vec2( 1.0, -1.0),
        vec2(-1.0, -1.0),
        vec2( 1.0,  1.0),
        vec2(-1.0, -1.0),
        vec2(-1.0,  1.0),
    );

    const uv = array(
        vec2(1.0, 0.0),
        vec2(1.0, 1.0),
        vec2(0.0, 1.0),
        vec2(1.0, 0.0),
        vec2(0.0, 1.0),
        vec2(0.0, 0.0),
    );
    
     return VertexOutput(
        vec4(pos[VertexIndex], 0.0, 1.0),
        uv[VertexIndex]
    );
}

@fragment
fn fragmentShaderMain(@location(0) fragUv: vec2<f32>) -> @location(0) vec4<f32> {
  return textureSample(diffuseTexture, textureSampler, fragUv);  
}